﻿#include <iostream>
#include <opencv2\opencv.hpp>

using namespace std;
using namespace cv;


int main(int argc, char **argv)
{
    Mat img;
    img = imread("face.png",IMREAD_COLOR);
    if (img.empty()) {
        cout << "picture error" << endl;
        return -1;
    }
    namedWindow("display", WINDOW_NORMAL);
    imshow("display", img);  //获取图片并输出
    

    //！！！重要！！！这是一个opencv自带已训练的人脸识别算法，具体路径需要根据opencv库安装位置更改！！！
    CascadeClassifier cascade;
    const string casPath ="E:/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml";

    //检测是否成功加载级联分类器
    if (!cascade.load(casPath)) {
        cout << "load error" << endl;
        return -1;
    }

    /*********************************** 人脸检测 ******************************/
    vector<Rect> faces(0);
    cascade.detectMultiScale(img, faces, 1.1, 2, 0, Size(30, 30));  //人脸识别算法

    cout << "人脸数:" << faces.size() << endl;
    /********************************  显示人脸矩形框 ******************************/

    if (faces.size() > 0)
    {
        for (size_t i = 0; i < faces.size(); i++)
        {
            rectangle(img, faces[i], Scalar(0, 0, 255), 2, 8, 0);  //生成矩形框出人脸

        }
    }
    else cout << "未检测到人脸" << endl;

    //换一个框输出
    namedWindow("face_detect",WINDOW_NORMAL);
    imshow("face_detect", img);

    //！！！重要！！！按m键退出
    while (waitKey(0) != 'm');
    destroyWindow("display");
    destroyWindow("face_detect");
    return 0;


    /********************以下空白***********************/



    //VideoCapture video;
    //video.open(0);

    //if (!video.isOpened()) {
    //    cout << "error" << endl;
    //    return -2;
    //}

    //cout <<"当前帧率" << video.get(CAP_PROP_FPS) << endl;

    //while (1) {
    //    Mat vClip;
    //    video >> vClip;

    //    if (vClip.empty()) {
    //        break;
    //    }

    //    imshow("video", vClip);

    //    uchar c = waitKey(1); //1ms的延迟

    //    if (c == 'm') {
    //        break;
    //    }
    //}




}

